bitkeeper revision 1.994.1.5 (40d80fc0MVMbD_X8rrCInCJ1FJtGOA)
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Tue, 22 Jun 2004 10:53:52 +0000 (10:53 +0000)
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Tue, 22 Jun 2004 10:53:52 +0000 (10:53 +0000)
Add reason code to getdomaininfo.

tools/xc/lib/xc.h
tools/xc/lib/xc_domain.c
tools/xc/py/Xc.c

index 4e75ebebef9e430ffca72d39847753fcdb04e2bb..274f2fddede57286bbbae611117573196e3b96d1 100644 (file)
@@ -27,6 +27,7 @@ typedef struct {
     unsigned int  cpu;
     unsigned int  dying:1, crashed:1, shutdown:1, 
                   paused:1, blocked:1, running:1;
+    unsigned int  shutdown_reason; /* only meaningful if shutdown==1 */
     unsigned long nr_pages;
     unsigned long shared_info_frame;
     u64           cpu_time;
index 84a97ce67960fc0681c0c613a1e1071594172e0a..ae4dff003de9f947136a6d874f524ed5514220ad 100644 (file)
@@ -99,6 +99,10 @@ int xc_domain_getinfo(int xc_handle,
         info->blocked  = (op.u.getdomaininfo.flags & DOMFLAGS_BLOCKED);
         info->running  = (op.u.getdomaininfo.flags & DOMFLAGS_RUNNING);
 
+        info->shutdown_reason = 
+            (op.u.getdomaininfo.flags>>DOMFLAGS_SHUTDOWNSHIFT) & 
+            DOMFLAGS_SHUTDOWNMASK;
+
         info->nr_pages = op.u.getdomaininfo.tot_pages;
         info->max_memkb = op.u.getdomaininfo.max_pages<<(PAGE_SHIFT-10);
         info->shared_info_frame = op.u.getdomaininfo.shared_info_frame;
index 343d118bbceca8b17a7487dd53f3305caa1babd1..1c6a90c1b43c8ce9fff9c6e293b6c0c3b220ddd6 100644 (file)
@@ -164,7 +164,8 @@ static PyObject *pyxc_domain_getinfo(PyObject *self,
     {
         PyList_SetItem(
             list, i, 
-            Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:l,s:L,s:s,s:l}",
+            Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i"
+                          ",s:l,s:L,s:s,s:l,s:i}",
                           "dom",       info[i].domid,
                           "cpu",       info[i].cpu,
                           "dying",     info[i].dying,
@@ -176,7 +177,8 @@ static PyObject *pyxc_domain_getinfo(PyObject *self,
                           "mem_kb",    info[i].nr_pages*4,
                           "cpu_time",  info[i].cpu_time,
                           "name",      info[i].name,
-                          "maxmem_kb", info[i].max_memkb
+                          "maxmem_kb", info[i].max_memkb,
+                          "shutdown_reason", info[i].shutdown_reason
                 ));
     }
 
@@ -1062,7 +1064,9 @@ static PyMethodDef pyxc_methods[] = {
       " running  [int]:  Bool - is the domain currently running?\n"
       " mem_kb   [int]:  Memory reservation, in kilobytes\n"
       " cpu_time [long]: CPU time consumed, in nanoseconds\n"
-      " name     [str]:  Identifying name\n" },
+      " name     [str]:  Identifying name\n"
+      " shutdown_reason [int]: Numeric code from guest OS, explaining "
+      "reason why it shut itself down.\n" },
 
     { "linux_save", 
       (PyCFunction)pyxc_linux_save,